package com.atguigu.gulimall.order.config;
/**
 * @author wuyuecai
 * @create 2022-03-10 22:06
 */

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 郭俊才
 * 2022/3/10
 */
@Configuration
public class RabbitMqConfig {

    /**
     * 也可以使用amqpAdmin中declare方法声明交换机、队列、绑定
     * 这里以直连交换机示例，其他交换机也类似
     */
    @Autowired
    private AmqpAdmin amqpAdmin;

    /**
     * 创建直连交换机
     * 1.第一个参数是交换机名称
     * 2.第二个参数是否持久化到rabbitmq服务器
     * 3.第三个参数是否自动删除
     */
    @Bean
    public Exchange directExchange() {
        return new DirectExchange("hello.direct.exchange",true,false);
    }

    /**
     * 创建一个队列
     * 1.第一个参数是队列的名称
     * 2.第二个参数是否是持久化的，表示一旦创建完成就会一直在rabbitmq的服务器上
     * 3.第三个参数是否是排他的，表示一旦有连接连上该队列，其他消费者就无法连上了
     * 4.第四个参数是否自动删除
     * 5.第五个参数是可选参数
     */
    @Bean
    public Queue queue() {
       return new Queue("hello.java.queue",true,false,false,null);
    }
    /**
     * 创建一个绑定 将交换机和交换机或者队列进行绑定
     * 1.第一个参数是要绑定的交换机或者队列名称
     * 2.第二个参数是绑定的类型 交换机或者队列
     * 3.第三个参数是绑定时的rotingKey
     * 4.第四个是需要传递的参数
     */
    @Bean
    public Binding binding() {
        return new Binding("hello.java.queue", Binding.DestinationType.QUEUE,"hello.direct.exchange","hello.java",null);
    }
}


